#Boa:Dialog:Dialog1

import wx
import wx.grid
import consultasBD
import Mensaje
import sincronizar_tabla  
import utiles

def create(parent):
    return Dialog1(parent)

[wxID_DIALOG1, wxID_DIALOG1BUTTON1, wxID_DIALOG1CANTIDAD, 
 wxID_DIALOG1OBSERVACION, wxID_DIALOG1PTC, wxID_DIALOG1S, wxID_DIALOG1SIGNO, 
 wxID_DIALOG1STATICTEXT1, wxID_DIALOG1STATICTEXT2, wxID_DIALOG1STATICTEXT3, 
 wxID_DIALOG1STATICTEXT4, wxID_DIALOG1STATICTEXT5, wxID_DIALOG1STATICTEXT6, 
 wxID_DIALOG1TIPO_AJUSTE, 
] = [wx.NewId() for _init_ctrls in range(14)]

class Dialog1(wx.Dialog):
    def _init_ctrls(self, prnt):
        # generated method, don't edit
        wx.Dialog.__init__(self, id=wxID_DIALOG1, name='', parent=prnt,
              pos=wx.Point(0, 0), size=wx.Size(833, 221),
              style=wx.DEFAULT_DIALOG_STYLE,
              title='Ajustes')
        self.SetClientSize(wx.Size(833, 221))
        self.Show(False)
        self.SetHelpText(u'')
        self.SetToolTipString(u'Dialog1')

        self.staticText3 = wx.StaticText(id=wxID_DIALOG1STATICTEXT3, label=u'',
              name='staticText3', parent=self, pos=wx.Point(112, 314),
              size=wx.Size(387, 18), style=0)

        self.staticText4 = wx.StaticText(id=wxID_DIALOG1STATICTEXT4, label=u'',
              name='staticText4', parent=self, pos=wx.Point(112, 200),
              size=wx.Size(400, 24), style=0)

        self.staticText1 = wx.StaticText(id=wxID_DIALOG1STATICTEXT1,
              label=u'PTC', name='staticText1', parent=self, pos=wx.Point(88,
              32), size=wx.Size(28, 18), style=0)

        self.staticText2 = wx.StaticText(id=wxID_DIALOG1STATICTEXT2,
              label=u'Cantidad', name='staticText2', parent=self,
              pos=wx.Point(216, 32), size=wx.Size(65, 18), style=0)

        self.staticText5 = wx.StaticText(id=wxID_DIALOG1STATICTEXT5,
              label=u'Tipo de Ajuste', name='staticText5', parent=self,
              pos=wx.Point(456, 32), size=wx.Size(104, 18), style=0)

        self.staticText6 = wx.StaticText(id=wxID_DIALOG1STATICTEXT6,
              label=u'Observacion', name='staticText6', parent=self,
              pos=wx.Point(648, 32), size=wx.Size(91, 18), style=0)

        self.ptc = wx.TextCtrl(id=wxID_DIALOG1PTC, name=u'ptc', parent=self,
              pos=wx.Point(72, 72), size=wx.Size(80, 24), style=0, value=u'')

        self.cantidad = wx.TextCtrl(id=wxID_DIALOG1CANTIDAD, name=u'cantidad',
              parent=self, pos=wx.Point(216, 72), size=wx.Size(80, 24), style=0,
              value=u'')

        self.observacion = wx.TextCtrl(id=wxID_DIALOG1OBSERVACION,
              name=u'observacion', parent=self, pos=wx.Point(648, 72),
              size=wx.Size(152, 24), style=0, value=u'')

        self.signo = wx.Choice(choices=['positivo', 'negativo'],
              id=wxID_DIALOG1SIGNO, name=u'signo', parent=self,
              pos=wx.Point(305, 69), size=wx.Size(80, 25), style=0)

        self.s = wx.Choice(choices=[], id=wxID_DIALOG1S, name=u's', parent=self,
              pos=wx.Point(604, 142), size=wx.Size(80, 25), style=0)
        self.s.Show(False)

        self.tipo_ajuste = wx.Choice(choices=['generico', 'discrepancia'],
              id=wxID_DIALOG1TIPO_AJUSTE, name=u'tipo_ajuste', parent=self,
              pos=wx.Point(456, 72), size=wx.Size(160, 25), style=0)

        self.button1 = wx.Button(id=wxID_DIALOG1BUTTON1, label=u'Guardar',
              name='button1', parent=self, pos=wx.Point(656, 176),
              size=wx.Size(136, 30), style=0)
        self.button1.Bind(wx.EVT_BUTTON, self.OnGuardar, id=wxID_DIALOG1BUTTON1)

    def __init__(self, parent):
        self._init_ctrls(parent)
        self.padre = parent
        self.sucursal = self.padre.sucursalNro

    def _validar(self, ptc, cantidad):
        if ptc == "":
            utiles.mensaje(self, "Debe ingresar un PTC")
            return False
        
        sql_ptc = "SELECT * FROM producto_talle_color WHERE id = '%s'" % ptc
        t = consultasBD.ordenCruda(sql_ptc)
        if not t:
            utiles.mensaje(self, "El PTC no fue encontrado")
            return False            
        
        try:
            t = int(cantidad)
            if t < 0:
                raise Exception()
        except ValueError:
            utiles.mensaje(self, "La cantidad debe ser un Numero")
            return False
        except Exception:
            utiles.mensaje(self, "La cantidad debe ser un Numero entero y positivo")
            return False
        
        return True
        
        

    def OnGuardar(self, event):
        
        
        ptc = self.ptc.Value
        cantidad = self.cantidad.Value
        signo = self.signo.GetStringSelection()
        tipo_ajuste = self.tipo_ajuste.GetStringSelection()        
        observacion = self.observacion.Value
        if not self._validar(ptc, cantidad):
            return
        
        cantidad = int(cantidad)
        
        try:
            consultasBD.begin()
            
            if signo == "negativo":
                cantidad *= -1

            operacion = "ajuste"
            if tipo_ajuste == "discrepancia":
                operacion = "ajuste_discrepancia"

            #Se registra el movimiento
            stock = utiles.stock_sumado(ptc, self.sucursal, cantidad)
            utiles.agregar_movimiento(ptc, stock_previo=stock - cantidad, stock_nuevo=stock, operacion=operacion, sucursal=self.sucursal, observacion=observacion)

            sql = "UPDATE stock SET stock = '%s' WHERE ptc = '%s' AND sucursal = '%s'" % (stock, ptc, self.sucursal)
            sincronizar_tabla.addChange(sql=sql)
            consultasBD.executaSinCommit(None, sql)

            consultasBD.commit()
            sincronizar_tabla.syncServerTables(self, ["productos", "producto_talle_color", "stock"])
            utiles.mensaje(self, "El ajuste se guardo y sincronizo correctamente")            
            utiles.mensaje(self, "El stock actual es de %s" % stock)  
            self.Close()

        except sincronizar_tabla.SyncError:
            utiles.mensaje(self, "E ajuste se guardo \n pero no termino de transmitirse por favor realize un sincronizacion")
        except Exception, e:
            import traceback
            import sys
            exc_type, exc_value, exc_tb = sys.exc_info()
            traceback.print_exception(exc_type, exc_value, exc_tb)
            print e.__str__()
            utiles.mensaje(self, "NO se pudo guardar el ajuste")    
            consultasBD.rollback()
